# coding=utf-8
from rest_framework import serializers
from goods_info.models import GoodsCategoryModel

class GoodsCategorySerializer(serializers.ModelSerializer):
    '''
    商品类别的序列化器，和反序列化
    '''

    # SerializerMethodField调用某一个函数
    # read_only只是序列化的时候用
    ''' 为了显示树形 类别结构 '''
    ''' 这个跟之前那种不同的是：  1.之前的更加灵活一点（可以自由的添加属性）
                              2.如果在表中是本表的外键关联自己本表才能这样用
    '''
    # 例：    parent = models.ForeignKey('self', blank=True, null=True, related_name='children', on_delete=models.SET_NULL)
    # 这里的children写的是parent对应的related_name='children'的反向过滤名称的名称
    children = serializers.SerializerMethodField(read_only=True)
    class Meta:
        model = GoodsCategoryModel
        fields = '__all__'

    # 函数的命名为：get_属性的名字
    def get_children(self,obj): # obj当前的模型对象 ==> GoodsCategoryModel对象
        if obj.children: # 如果有子类别
            # GoodsCategorySerializer(obj.children,many=True)这个是序列化对象
            # .data把对象（列表）转化为字典
            return GoodsCategorySerializer(obj.children,many=True).data
        else:
            return None



